package store

import (
	"fmt"
	"github.com/tealeg/xlsx/v3"
	"ping-info-go/pkg/global"
	"strings"
)

// GenerateExcel 生成 Excel 文件
func GenerateExcel(tableDataList []*TableData) (*xlsx.File, error) {
	// 创建新 Excel 文件
	file := xlsx.NewFile()

	// 添加工作表（默认名称 "Sheet1"）
	sheet, err := file.AddSheet("Sheet1")
	if err != nil {
		return nil, fmt.Errorf("创建工作表失败: %v", err)
	}

	// 1. 设置表头
	headerRow := sheet.AddRow()
	if headerRow == nil {
		return nil, fmt.Errorf("创建表头行失败")
	}
	for col, header := range global.HeaderConf {
		// 创建表头单元格
		cell := headerRow.AddCell()
		cell.Value = header.Name
		style := cell.GetStyle()
		style.Font.Bold = true
		style.ApplyBorder = true
		sheet.SetColWidth(col+1, col+1, float64(header.Length*0.1))
		style.Border = *xlsx.NewBorder("dashed", "dashed", "none", "thick")
	}

	// 2. 填充数据行
	for _, tableData := range tableDataList {
		// 创建数据行
		dataRow := sheet.AddRow()
		if dataRow == nil {
			return nil, fmt.Errorf("创建数据行失败")
		}

		// 获取行背景色（处理十六进制颜色格式 "#FFFFFF" -> "FFFFFF"）
		bgColorHex := tableData.GetShowColorHex()
		rgbColor := strings.TrimPrefix(bgColorHex, "#")

		// 创建单元格样式（背景色）
		style := xlsx.NewStyle()
		style.Fill.PatternType = "solid" // 添加填充模式
		style.Fill.FgColor = rgbColor    // 直接使用RGB字符串
		style.ApplyFill = true           // 启用填充样式应用
		style.Border = *xlsx.NewBorder("dashed", "dashed", "none", "dashed")

		// 填充当前行的单元格数据
		for col := range global.HeaderConf {
			cell := dataRow.AddCell()
			cell.Value = tableData.GetShowStr(col)

			// 修复：SetStyle无返回值，移除错误判断
			cell.SetStyle(style)
		}
	}

	return file, nil
}
